import sbt._

object Dependencies {

  def __compile(dep: ModuleID): Seq[ModuleID] = __compile(Seq(dep))

  def __compile(deps: Seq[ModuleID]): Seq[ModuleID] = deps map (_ % "compile")

  def __provided(dep: ModuleID): Seq[ModuleID] = __provided(Seq(dep))

  def __provided(deps: Seq[ModuleID]): Seq[ModuleID] = deps map (_ % "provided")

  def __test(dep: ModuleID): Seq[ModuleID] = __test(Seq(dep))

  def __test(deps: Seq[ModuleID]): Seq[ModuleID] = deps map (_ % "test")

  def __runtime(dep: ModuleID): Seq[ModuleID] = __runtime(Seq(dep))

  def __runtime(deps: Seq[ModuleID]): Seq[ModuleID] = deps map (_ % "runtime")

  def __container(dep: ModuleID): Seq[ModuleID] = __container(Seq(dep))

  def __container(deps: Seq[ModuleID]): Seq[ModuleID] = deps map (_ % "container")


  ///////////////////////////////////////
  //         Basic
  ///////////////////////////////////////

  lazy val _scalaModules = Seq(
    "org.scala-lang.modules" %% "scala-xml" % "1.0.4",
    "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.4"
  ).map(_.exclude("org.scala-lang", "scala-library").
    exclude("org.scala-lang", "scala-compiler").
    exclude("org.scala-lang", "scala-reflect"))

  private val _scalaVersion = "2.11.7"
  lazy val _scala = Seq(
    "org.scala-lang" % "scala-library" % _scalaVersion,
    "org.scala-lang" % "scala-compiler" % _scalaVersion,
    "org.scala-lang" % "scala-reflect" % _scalaVersion
  )


  ///////////////////////////////////////
  //       Typesafe
  ///////////////////////////////////////

  private val _akkaVersion = "2.3.12"
  lazy val _akkaActor = "com.typesafe.akka" %% "akka-actor" % _akkaVersion
  lazy val _akkaRemote = "com.typesafe.akka" %% "akka-remote" % _akkaVersion
  lazy val _akkaSlf4j = "com.typesafe.akka" %% "akka-slf4j" % _akkaVersion
  lazy val _akkaTestkit = Seq(
    "com.typesafe.akka" %% "akka-testkit" % _akkaVersion)

  lazy val _akkaStreamVersion = "1.0"
  lazy val _akkaStream = "com.typesafe.akka" %% "akka-stream-experimental" % _akkaStreamVersion

  lazy val _akkaHttpVersion = "1.0"
  lazy val _akkaHttp = Seq(
    "com.typesafe.akka" %% "akka-http-experimental" % _akkaHttpVersion,
    "com.typesafe.akka" %% "akka-http-core-experimental" % _akkaHttpVersion,
    "com.typesafe.akka" %% "akka-http-xml-experimental" % _akkaHttpVersion
  )

  lazy val _slickVersion = "3.0.0"
  lazy val _slick = "com.typesafe.slick" %% "slick" % _slickVersion
  lazy val _slickExtensions = "com.typesafe.slick" %% "slick-extensions" % _slickVersion
  lazy val _slickCodegen = "com.typesafe.slick" %% "slick-codegen" % _slickVersion

  lazy val _slickPgVersion = "0.9.0"
  lazy val _slickPg = Seq(
    ("com.github.tminglei" %% "slick-pg" % _slickPgVersion).exclude("com.typesafe.slick", "slick")
  )

  lazy val _playVersion = "2.4.2"
  lazy val _playJson = "com.typesafe.play" %% "play-json" % _playVersion
  lazy val _play = "com.typesafe.play" %% "play" % _playVersion

  lazy val _typesafeConfig = "com.typesafe" % "config" % "1.3.0"

  lazy val _scalaLogging = ("com.typesafe.scala-logging" %% "scala-logging" % "3.1.0").
    exclude("org.scala-lang", "scala-library").
    exclude("org.scala-lang", "scala-reflect")

  lazy val _scalaLoggingSlf4j = "com.typesafe.scala-logging" % "scala-logging-slf4j_2.11" % "2.1.2"


  ///////////////////////////////////////
  //         Myself
  ///////////////////////////////////////
  lazy val _playMini = "ws.very.thirdparty" %% "play-mini" % "1.2.1"


  ///////////////////////////////////////
  //         Database
  ///////////////////////////////////////

  lazy val _redisClient = "net.debasishg" %% "redisreact" % "0.8"

  lazy val _bson = "org.mongodb" % "bson" % "3.0.2"

  lazy val _casbah = "org.mongodb" %% "casbah" % "2.8.1"

  lazy val reactiveMongo = "org.reactivemongo" %% "reactivemongo" % "0.11.0"

  lazy val _h2 = "com.h2database" % "h2" % "1.4.186"

  lazy val _mysql = "mysql" % "mysql-connector-java" % "5.1.35"

  lazy val _postgresql = "org.postgresql" % "postgresql" % "9.4-1201-jdbc41"

  lazy val _hikariCP = "com.zaxxer" % "HikariCP" % "2.3.9"

  lazy val _redisScala = "com.github.etaty" %% "rediscala" % "1.5.0"

  lazy val _redisLettuce = "biz.paluch.redis" % "lettuce" % "3.3.Final"

  ///////////////////////////////////////
  //         Elastic4s
  ///////////////////////////////////////

  lazy val _elastic4s = "com.sksamuel.elastic4s" %% "elastic4s-core" % "1.7.4"

  lazy val _elastic4sJackson = "com.sksamuel.elastic4s" %% "elastic4s-jackson" % "1.7.4"

  ///////////////////////////////////////
  //         Log
  ///////////////////////////////////////

  lazy val _slf4j = "org.slf4j" % "slf4j-api" % "1.7.12"

  lazy val _slf4jNop = "org.slf4j" % "slf4j-nop" % "1.7.12"

  lazy val _slf4jLog4h12 = "org.slf4j" % "slf4j-log4j12" % "1.7.12"

  lazy val _logback = "ch.qos.logback" % "logback-classic" % "1.1.3"

  ///////////////////////////////////////
  //         Common
  ///////////////////////////////////////
  lazy val _commonsEmail = "org.apache.commons" % "commons-email" % "1.3.3"

  lazy val _commonsIo = "commons-io" % "commons-io" % "2.4"

  lazy val _commonsImage = "org.apache.commons" % "commons-imaging" % "1.0-SNAPSHOT"

  lazy val _commonsNet = "commons-net" % "commons-net" % "3.3"

  lazy val _commonsLang3 = "org.apache.commons" % "commons-lang3" % "3.3.2"

  lazy val _commonCodecs = "commons-codec" % "commons-codec" % "1.10"

  ///////////////////////////////////////
  //         Http
  ///////////////////////////////////////

  lazy val _netty = "io.netty" % "netty" % "4.0.26.Final"

  lazy val _jsoup = "org.jsoup" % "jsoup" % "1.8.1"

  lazy val _asyncHttpClient = "com.ning" % "async-http-client" % "1.8.14"

  lazy val _swaggerAsyncHttp = "com.wordnik.swagger" %% "swagger-async-httpclient" % "0.3.5"

  lazy val _scalaJHttp = "org.scalaj" %% "scalaj-http" % "1.1.4"

  ///////////////////////////////////////
  //         Json
  ///////////////////////////////////////
  lazy val _json4sNative = "org.json4s" %% "json4s-native" % "3.2.10"

  lazy val _json4sJackson = "org.json4s" %% "json4s-jackson" % "3.2.10"

  ///////////////////////////////////////
  //         Test
  ///////////////////////////////////////
  lazy val _scalatest = Seq(
    "org.scalatest" %% "scalatest" % "2.2.1"
  )

  lazy val _scalatestPlay = "org.scalatestplus" %% "play" % "1.4.0-M3"


  lazy val _specs2Play = "com.typesafe.play" %% "play-specs2" % _playVersion


  lazy val _junit = "junit" % "junit" % "4.12"

  lazy val _htmlUnit = "net.sourceforge.htmlunit" % "htmlunit" % "2.15"

  lazy val _specs2Test = "org.specs2" %% "specs2-core" % "3.6.4" //resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases"

  ///////////////////////////////////////
  //         Html
  ///////////////////////////////////////

  lazy val _twirl = "com.typesafe.play" %% "twirl-api" % "1.1.1"

  ///////////////////////////////////////
  //         Other
  ///////////////////////////////////////

  lazy val verSelenium = "2.45.0"
  lazy val _selenium = "org.seleniumhq.selenium" % "selenium-java" % verSelenium

  lazy val _bouncycastle = "org.bouncycastle" % "bcprov-jdk15on" % "1.52"

  lazy val _javaxActivation = "javax.activation" % "activation" % "1.1.1"

  lazy val _javaxJta = "javax.transaction" % "jta" % "1.1"

  lazy val _undertowVersion = "1.1.3.Final"
  lazy val _undertowCore = "io.undertow" % "undertow-core" % _undertowVersion

  lazy val _jodatime = Seq("joda-time" % "joda-time" % "2.7", "java" % "joda-convert" % "1.7")

  lazy val _patchca = "com.github.bingoohuang" % "patchca" % "0.0.1"

  lazy val _mimeUtil = ("eu.medsea.mimeutil" % "mime-util" % "2.1.3").exclude("org.slf4j", "slf4j-log4j12")

  lazy val _scalatraRl = "org.scalatra.rl" % "rl_2.11" % "0.4.10"

  lazy val _sanselan = "org.apache.sanselan" % "sanselan" % "0.97-incubator"

}


